
# 可变参数
"""
1. 概念 ： 通过定义为可变参数，传入的参数数量就是可变的
2. 分类 ： 列表(元组)形式的可变参数 ，字典形式的可变参数
3. 列表形式的可变参数 ：
    (1). 定义 ： 在参数名前加一个* ， 传值的时候进入到函数内部就变为一个元组
    (2). 传值 ：可以以位置参数传递 ，也可以以列表或元组形成传递 ，前面必须加上*  。

4. 字典形式的可变参数
    (1). 定义 ：在参数名前加** ，传值进入到函数内变为一个字典
    (2). 传值 ： 可以以关键字参数传递，也可以以字典形式传递 ，前面加上**
"""


# 需求 ：加法的操作 ，用户可以随便传入任意个值
def add(x,y,*args):
    print("args:",args)
    z = x + y + sum(args)
    return z


# 调用
print(add(3,4))
print(add(3,4,5))
print(add(3,4,5,6,7))
print(add(3,4,5,6,6,7,8,9))     # 位置参数传递

# 以列表或元组形式传递
print(add(3,4,*[5,6,7]))
print(add(3,4,*(5,6,7)))

# 编写一个乘法的函数 ，要求不能直接相乘。
print("==============================")
# 加法
def add1(a,b,**kwargs):
    print("kwargs:",kwargs)
    z = 0
    for x in kwargs.values():
        z += x
    return a + b + z

print(add1(2,3))
print(add1(2,3,c=5))
print(add1(2,3,c=5,d=8,x=9))        # 以关键字参数传递


# 以字典形式传递
print(add1(2,3,**{"c":5,"d":8,"x":9}))


def add2(*args,**kwargs):
    pass